import request from "@/utils/request";
import { downloadFileByData } from "@/utils/download";

/**
 * 租户配置 实体类型定义
 * 
 * @author guagua
 * @date 2025-06-29 02:05:51
 */
export interface SysTenantConfigModel {
  /** 主键ID */

  /** 仅管理员修改 */
  isEditable: number;

  /** 配置名称 */
  name?: string;

  /** 配置值 */
  value?: string;

  /** 备注 */
  remarks?: string;

  /** 唯一主键 */
  id?: string;

  /** 父级主键集合 */
  orgIds?: string;

  /** 修改人 */
  updateBy?: string;

  /** 创建时间 */
  createTime?: string;

  /** 创建者 */
  createBy?: string;

  /** 修改时间 */
  updateTime?: string;

  /** 乐观锁 */
  version?: number;


}

/**
 * 分页查询参数类型
 */
export interface SysTenantConfigQueryParams {
  /** 页码 */
  pageNo?: number;

  /** 每页条数 */
  pageSize?: number;

  /** 仅管理员修改 */
  isEditable_EQ?: number;
  /** 配置名称 */
  name_LIKE?: string;
  /** 备注 */
  remarks_LIKE?: string;

  /** 排序字段 */
  orderBy?: string;

  /** 排序方式 */
  sortOrder?: 'asc' | 'desc';
}

/**
 * API 响应类型
 */
export interface ApiResponse<T = any> {
  code: number;
  msg: string;
  data: T;
  timestamp: number;
}

/**
 * 分页响应数据类型
 */
export interface PageResult<T> {
  rows: T[];
  total: number;
  size: number;
  current: number;
  pages: number;
}

/**
 * 获取租户配置分页列表
 * @param params 查询参数
 * @returns Promise<ApiResponse<PageResult<SysTenantConfigModel>>>
 */
export function getList(params: SysTenantConfigQueryParams): Promise<ApiResponse<PageResult<SysTenantConfigModel>>> {
  return request({
    url: "/api/v1/system/tenantconfig/findPage",
    method: "get",
    params,
  });
}

/**
 * 新增租户配置
 * @param data 新增数据
 * @returns Promise<ApiResponse<SysTenantConfigModel>>
 */
export function doInsert(data: Partial<SysTenantConfigModel>): Promise<ApiResponse<SysTenantConfigModel>> {
  return request({
    url: "/api/v1/system/tenantconfig/insert",
    method: "post",
    data,
  });
}

/**
 * 更新租户配置
 * @param data 更新数据
 * @returns Promise<ApiResponse<SysTenantConfigModel>>
 */
export function doUpdate(data: SysTenantConfigModel): Promise<ApiResponse<SysTenantConfigModel>> {
  return request({
    url: "/api/v1/system/tenantconfig/update",
    method: "post",
    data,
  });
}

/**
 * 删除租户配置
 * @param params 删除参数
 * @returns Promise<ApiResponse<boolean>>
 */
export function doDelete(params: { id: string }): Promise<ApiResponse<boolean>> {
  return request({
    url: "/api/v1/system/tenantconfig/del",
    method: "post",
    params,
  });
}

/**
 * 批量删除租户配置
 * @param params 批量删除参数
 * @returns Promise<ApiResponse<boolean>>
 */
export function doDeleteAll(params: { ids: string }): Promise<ApiResponse<boolean>> {
  return request({
    url: "/api/v1/system/tenantconfig/delAll",
    method: "post",
    params,
  });
}

/**
 * 导出Excel 目前只支持一层参数传递
 * @param params 导出参数
 * @returns Promise<void>
 */
export async function doExportExcel(params: SysTenantConfigQueryParams): Promise<void> {
  const authURL = "/api/v1/system/tenantconfig/excel/auth/export";

  const downloadURL = "/api/v1/system/tenantconfig/excel/export/";

  try {
    // 认证
    const response: ApiResponse<string> = await request({
      url: authURL,
      method: "get",
      params,
    });

    if (response.data) {
      // 下载文件
      downloadFileByData(downloadURL + response.data, params);
    }
  } catch (error) {
    console.error('导出Excel失败:', error);
    throw error;
  }
}

/**
 * 下载导入模版
 * @returns Promise<void>
 */
export async function doDownloadTemplate(): Promise<void> {
  const authURL = "/api/v1/system/tenantconfig/excel/auth/import-template-export";

  const downloadURL = "/api/v1/system/tenantconfig/excel/export/";

  try {
    // 认证
    const response: ApiResponse<string> = await request({
      url: authURL,
      method: "get",
    });

    if (response.data) {
      // 下载文件
      downloadFileByData(downloadURL + response.data, {});
    }
  } catch (error) {
    console.error('下载模板失败:', error);
    throw error;
  }
}

/**
 * 导入Excel
 * @param data 上传的文件数据
 * @returns Promise<ApiResponse<any>>
 */
export function doImportExcel(data: FormData): Promise<ApiResponse<any>> {
  return request({
    url: "/api/v1/system/tenantconfig/importExcel",
    method: "post",
    // 最长超时时间 3 分钟
    timeout: 180000,
    headers: {
      "Content-Type": "multipart/form-data"
    },
    data,
  });
}

/**
 * 获取租户配置详情
 * @param id 主键ID
 * @returns Promise<ApiResponse<SysTenantConfigModel>>
 */
export function getById(id: string): Promise<ApiResponse<SysTenantConfigModel>> {
  return request({
    url: `/api/v1/system/tenantconfig/findById/${id}`,
    method: "get",
  });
}

/**
 * 启用/禁用租户配置
 * @param params 启用禁用参数
 * @returns Promise<ApiResponse<boolean>>
 */
export function doEnable(params: { id: string; enable: boolean }): Promise<ApiResponse<boolean>> {
  return request({
    url: "/api/v1/system/tenantconfig/enable",
    method: "post",
    params,
  });
}